/*
 * File     : DniTypes.java
 * Created  : 2 May 2011
 *
 * Copyright © 2011 Matthew Wilson (mj. {my-surname} .uk {at} gmail.com)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.googlecode.dni.internal;

import com.googlecode.dni.Allocator;
import com.googlecode.dni.internal.call.LastError;
import com.googlecode.dni.internal.library.LibraryHelper;
import com.googlecode.dni.internal.library.ScratchMemory;
import com.googlecode.dni.internal.string.FastCharset;
import com.googlecode.dni.internal.structure.AbstractOpaqueStructure;
import com.googlecode.dni.internal.structure.AbstractStructureFactory;
import com.googlecode.dni.internal.structure.StructureHelper;
import com.googlecode.dni.type.CustomNativeObject;
import com.googlecode.dni.type.DoubleReference;
import com.googlecode.dni.type.FloatReference;
import com.googlecode.dni.type.IntReference;
import com.googlecode.dni.type.LongReference;
import com.googlecode.dni.type.NativeObject;
import com.googlecode.dni.type.NativeObjectList;
import com.googlecode.dni.type.NativeString;
import com.googlecode.dni.type.NativeStringBuffer;
import com.googlecode.dni.type.ObjectReference;
import com.googlecode.dni.type.Pointer;
import com.googlecode.dni.type.structure.Structure;

/**
 * <p>
 *  Provides static strings for the DNI types during byte-code generation.
 * </p>
 *
 * @author Matthew Wilson
 */
public final class DniTypes
{

    //-- Packages --------------------------------------------------------------

    /** Root package. */
    public static final String PACKAGE = "com/googlecode/dni";

    /** <code>type</code> package. */
    public static final String TYPE_PACKAGE = PACKAGE + "/type";

    /** <code>experimental</code> package. */
    public static final String EXPERIMENTAL_PACKAGE = PACKAGE + "/experimental";

    /** <code>structure</code> package. */
    public static final String STRUCTURE_PACKAGE = TYPE_PACKAGE + "/structure";

    /** <code>internal</code> package. */
    public static final String INTERNAL_PACKAGE = PACKAGE + "/internal";

    /** <code>internal.call</code> package. */
    public static final String INTERNAL_CALL_PACKAGE = INTERNAL_PACKAGE + "/call";

    /** <code>internal.library</code> package. */
    public static final String INTERNAL_LIBRARY_PACKAGE = INTERNAL_PACKAGE + "/library";

    /** <code>internal.string</code> package. */
    public static final String INTERNAL_STRING_PACKAGE = INTERNAL_PACKAGE + "/string";

    /** <code>internal.structure</code> package. */
    public static final String INTERNAL_STRUCTURE_PACKAGE = INTERNAL_PACKAGE + "/structure";


    //-- API Types -------------------------------------------------------------

    /** {@link Allocator}. */
    public static final String ALLOCATOR_TYPE = PACKAGE + "/Allocator";

    /** {@link CustomNativeObject}. */
    public static final String CUSTOM_NATIVE_OBJECT_TYPE = TYPE_PACKAGE + "/CustomNativeObject";

    /** {@link DoubleReference}. */
    public static final String DOUBLE_REFERENCE_TYPE = TYPE_PACKAGE + "/DoubleReference";

    /** {@link FloatReference}. */
    public static final String FLOAT_REFERENCE_TYPE = TYPE_PACKAGE + "/FloatReference";

    /** {@link IntReference}. */
    public static final String INT_REFERENCE_TYPE = TYPE_PACKAGE + "/IntReference";

    /** {@link LongReference}. */
    public static final String LONG_REFERENCE_TYPE = TYPE_PACKAGE + "/LongReference";

    /** {@link NativeObject}. */
    public static final String NATIVE_OBJECT_TYPE = TYPE_PACKAGE + "/NativeObject";

    /** {@link NativeObjectList}. */
    public static final String NATIVE_OBJECT_LIST_TYPE = TYPE_PACKAGE + "/NativeObjectList";

    /** {@link NativeString}. */
    public static final String NATIVE_STRING_TYPE = TYPE_PACKAGE + "/NativeString";

    /** {@link NativeStringBuffer}. */
    public static final String NATIVE_STRING_BUFFER_TYPE = TYPE_PACKAGE + "/NativeStringBuffer";

    /** {@link ObjectReference}. */
    public static final String OBJECT_REFERENCE_TYPE = TYPE_PACKAGE + "/ObjectReference";

    /** {@link Pointer}. */
    public static final String POINTER_TYPE = TYPE_PACKAGE + "/Pointer";

    /** {@link Structure}. */
    public static final String STRUCTURE_TYPE = STRUCTURE_PACKAGE + "/Structure";


    //-- Experimental API Types ------------------------------------------------



    //-- Internal Types --------------------------------------------------------

    /** {@link DniInternal}. */
    public static final String DNI_INTERNAL_TYPE =
        INTERNAL_PACKAGE + "/DniInternal";

    /** {@link EnumDictionary}. */
    public static final String ENUM_DICTIONARY_TYPE =
        INTERNAL_PACKAGE + "/EnumDictionary";

    /** {@link MemoryAccess}. */
    public static final String MEMORY_ACCESS_TYPE =
        INTERNAL_PACKAGE + "/MemoryAccess";

    /** {@link LastError}. */
    public static final String LAST_ERROR_TYPE =
        INTERNAL_CALL_PACKAGE + "/LastError";

    /** {@link LibraryHelper}. */
    public static final String LIBRARY_HELPER_TYPE =
        INTERNAL_LIBRARY_PACKAGE + "/LibraryHelper";

    /** {@link ScratchMemory}. */
    public static final String SCRATCH_MEMORY_TYPE =
        INTERNAL_LIBRARY_PACKAGE + "/ScratchMemory";

    /** {@link FastCharset}. */
    public static final String FAST_CHARSET_TYPE =
        INTERNAL_STRING_PACKAGE + "/FastCharset";

    /** {@link AbstractOpaqueStructure}. */
    public static final String ABSTRACT_OPAQUE_STRUCTURE_TYPE =
        INTERNAL_STRUCTURE_PACKAGE + "/AbstractOpaqueStructure";

    /** {@link AbstractOpaqueStructure}. */
    public static final String ABSTRACT_STRUCTURE_TYPE =
        INTERNAL_STRUCTURE_PACKAGE + "/AbstractStructure";

    /** {@link AbstractStructureFactory}. */
    public static final String ABSTRACT_STRUCTURE_FACTORY_TYPE =
        INTERNAL_STRUCTURE_PACKAGE + "/AbstractStructureFactory";

    /** {@link StructureHelper}. */
    public static final String STRUCTURE_HELPER_TYPE =
        INTERNAL_STRUCTURE_PACKAGE + "/StructureHelper";

}
